﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Telerik.Web.Mvc;
using Helena.Areas.Categorias.Models;
using Helena.Areas.Campanas.Models;
using Helena.Areas.Configuraciones.Models;
using System.Threading;
using Helena.Areas.Degustaciones.Models;
using Helena.Areas.Productos.Models;
using Helena.Areas.Vendedores.Models;
using Helena.Areas.Reportes.Models;


namespace Helena.Areas.Degustaciones.Controllers
{
    public class DegustacionController : Controller
    {
        LogicaDegustacion db = new LogicaDegustacion();
        LogicaCategoria cat_db = new LogicaCategoria();
        LogicaCampana cam_db = new LogicaCampana();
        LogicaUnidad uni_db = new LogicaUnidad();
        LogicaProducto pro_db = new LogicaProducto();
        LogicaVendedor vend_db = new LogicaVendedor();
        LogicaKardex kardex = new LogicaKardex();
        LogicaVendedor vendedor = new LogicaVendedor();

        #region Comun

        public ActionResult Index()
        {
            VendedorView vw = (VendedorView)Session["Vendedor"];
            try
            {
                if (vw.ID != 0)
                {
                    if (vw.admin)
                    {
                        ObtenerCategorias();
                        ObtenerCampanas();
                        ObtenerUnidades();
                        ObtenerProductos();
                        obtenerVendedores();
                        return View();
                    }
                    else
                    {
                        return Redirect("../Home/Error");
                    }
                }
                else
                {
                    return Redirect("../Home/NoSession");
                }
            }
            catch
            {
                return Redirect("../Home/NoSession");
            }
        }

        [GridAction]
        public ActionResult Select()
        {
            return View("Index", new GridModel(db.i_RetornarDegustaciones()));
        }

        [AcceptVerbs(HttpVerbs.Post)]
        [GridAction]
        public ActionResult Insert()
        {

            DegustacionView d_v = new DegustacionView();
            if (TryUpdateModel(d_v))
            {
                d_v.VendedorID = vend_db.VendedorActivo().ID;
                ProductoView p = pro_db.i_RetornarProducto(d_v.ProductoID);
                d_v.CampanaID = p.campanaID;
                d_v.CategoriaID = p.categoriaID;
                kardex.IngresarDegustacion(p, d_v.Cantidad, DateTime.Now);
                db.i_AgregarDegustacion(d_v);               

            }
            return View("Index", new GridModel(db.i_RetornarDegustaciones()));
        }

        [AcceptVerbs(HttpVerbs.Post)]
        [GridAction]
        public ActionResult Delete(int? id)
        {
            int ID = id ?? -1;
            DegustacionView degustacion_anterior = db.i_RetornarDegustacion(ID);
            ProductoView p = pro_db.i_RetornarProductos().Where(y => y.ID == degustacion_anterior.ProductoID).FirstOrDefault();
            
            kardex.IngresarDegustacion(p, -degustacion_anterior.Cantidad, DateTime.Now);
            
            db.i_EliminarDegustacion(ID);
                        
            return View("Index", new GridModel(db.i_RetornarDegustaciones()));
        }
                
        #endregion

        #region Extras

        private void obtenerVendedores()
        {
            ViewData["Vendedores"] = vend_db.i_RetornarVendedores();
        }

        private void ObtenerCategorias()
        {
            ViewData["Categorias"] = cat_db.i_RetornarCategorias();
        }

        private void ObtenerCampanas()
        {
            ViewData["Campanas"] = cam_db.i_RetornarCampanas();

            //db.context_publico.t_Campanas
            //.Select(e => new { ID = e.ID, Nombre = e.NombreCampana })
            //.OrderBy(e => e.Nombre).ToList();
        }

        private void ObtenerUnidades()
        {
            ViewData["Unidades"] = uni_db.i_RetornarUnidades();
        }

        private void ObtenerProductos()
        {
            ViewData["Productos"] = pro_db.i_RetornarProductos().Where(d => d.Estado == true).ToList();
        }

        #endregion

    }
}
